package facetest;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * 实现一个容器，有add方法和size方法。   两个线程， 一个线程添加10个元素，  另一个线程监听当到添加到第5个的时候进行提示
 */
public class WaitNotifyTest {
    List list = new ArrayList<>();

    public void add(Object o) {
        list.add(o);
    }

    public int size() {
        return list.size();
    }

    @Test
    public void test() {
        Object lock = new Object();

        new Thread(() -> {
            synchronized (lock) {
                try {
                    if (list.size() != 5) {
                        lock.wait();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println("第5个了。。。提醒一下");
                lock.notify();
            }

        }).start();
        new Thread(() -> {
            synchronized (lock) {
                for (int i = 0; i < 10; i++) {
                    System.out.println(i);
                    list.add(i);
                    if (list.size() == 5) {
                        lock.notify();
                        try {
                            lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                    }

                }
            }


        }).start();


        while (true) ;
    }
}
